package com.demo.behavioral.responsibility;

/**
 * 责任链模式
 * 有多个对象，每个对象持有对下一个对象的引用，这样就会形成一条链，请求在这条链上传递，直到某一对象决定处理该请求。
 * 但是发出者并不清楚到底最终那个对象会处理该请求，所以，责任链模式可以实现，在隐瞒客户端的情况下，对系统进行动态的调整。
 * 应用场景如银行业务系统，处理完流程1就到流程2，然后到流程3，依次执行到最终结果。
 * 优点：降低耦合度，它将请求的发送者和接收者解耦，
 * 实现方式：新建一个含有自己实例、迭代公共方法的抽象处理者角色类，新建多个具体处理者角色，
 * 链接上的请求可以是一条链，可以是一个树，还可以是一个环
 * @author allen
 *
 */
public class Test {
	
	public static void main(String[] args) {
		//一次银行信用卡开户，由网点柜员、客户经理、大堂经理审批
		//先组装责任链
		Handler dotTeller = new DotTeller();
		Handler accountManager = new AccountManager();
		Handler lobbyManager = new LobbyManager();
		//设置下一处理人
		dotTeller.setSuccessor(accountManager);
		accountManager.setSuccessor(lobbyManager);
		lobbyManager.setSuccessor(dotTeller);
		//然后执行
		dotTeller.handleRequest("银行开户"); 
	}

}
